package com.qkl.xiatang.app.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qkl.xiatang.app.dto.FeedQty;
import com.qkl.xiatang.app.dto.feed.*;
import com.qkl.xiatang.app.dto.log.JobLogInDTO;
import com.qkl.xiatang.app.dto.log.JobLogVO;
import com.qkl.xiatang.app.entity.feed.FeedAllocDetailEntity;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface FeedAllocMapper extends BaseMapper<FeedAllocDetailEntity> {


    /**
     * 虾料配料表
     * @param list
     */
    void addFeedAlloc(List<FeedAllocDTO> list);

    /**
     * 添加配(喂)料明细
     * @param list
     */
    void addFeedAllocDetail(List<FeedAllocDetailDTO> list);

    /**
     * 配(喂)料料量表
     * @param list
     */
    void addFeedAllocQty(List<FeedAllocQtyDTO> list);

    /**
     * 动保配(喂)料明细
     * @param list
     */
    void addZooAllocDetail(List<ZooAllocDetailDTO> list);


    /**
     * 删除配(喂)料明细
     * @param allocDate
     * @param pondIdList
     */
    void deleteFeedAllocDetail(@Param("companyId") String companyId,@Param("allocDate") Date allocDate,@Param("pondIdList")  List<String> pondIdList,@Param("taskIdList")  List<String> taskIdList);

    /**
     * 配(喂)料料量表
     * @param companyId
     * @param allocDate
     * @param pondIdList
     */
    void deleteFeedAllocQty(@Param("companyId") String companyId,@Param("allocDate") Date allocDate,@Param("pondIdList")  List<String> pondIdList,@Param("taskIdList")  List<String> taskIdList);

    /**
     * 删除动保配(喂)料明细表
     * @param allocDate
     * @param pondIdList
     */
    void deleteZooAllocDetail(@Param("allocDate") Date allocDate,@Param("feedIdList") List<String> feedIdList,@Param("pondIdList")  List<String> pondIdList);

    /**
     * 塘口是否已配料
     * @param allocDate
     * @param pondIdList
     * @return
     */
    Integer pondIsAlloc(@Param("allocDate") Date allocDate,@Param("pondIdList")  List<String> pondIdList);

    /**
     * 查询应减库存料量
     * @param allocDate
     * @param pondIdList
     * @return
     */
    List<DecrQtyDTO> queryDecrQty(@Param("companyId") String companyId,@Param("allocDate") Date allocDate,@Param("pondIdList")  List<String> pondIdList,@Param("taskIdList") List<String> taskIdList);

    /**
     * 查询存在喂料任务
     * @param companyId
     * @param templateId
     * @param allocDate
     * @param pondIdList
     * @return
     */
    List<Map<String,Object>> queryExistsFeedTask(@Param("companyId") String companyId,@Param("templateId") String templateId,@Param("allocDate") Date allocDate,@Param("pondIdList")  List<String> pondIdList);

    /**
     * 查询动保应减库存料量
     * @param allocDate
     * @param pondIdList
     * @return
     */
    List<DecrQtyDTO> queryZooDecrQty(@Param("allocDate") Date allocDate,@Param("feedIdList") List<String> feedIdList,@Param("pondIdList")  List<String> pondIdList);

    /**
     * 减库存
     * @param userId
     * @param pondId
     * @param qty
     */
    void decrFeedStock(@Param("userId") String userId,@Param("pondId") String pondId,@Param("qty") Double qty);

    /**
     * 查询喂料任务
     * @param pondId
     * @param allocDate
     * @return
     */
    List<QueryFeedTaskDTO> queryFeedTask(@Param("pondId") String pondId,@Param("allocDate") Date allocDate);

    /**
     * 查询动保喂料任务
     * @param pondId
     * @param allocDate
     * @return
     */
    List<Map<String,Object>> queryZooTask(@Param("pondId") String pondId,@Param("allocDate") Date allocDate);

    /**
     * 查询动保未完成任务
     * @param companyId
     * @return
     */
    List<Map<String,Object>> queryZooUnfinishTask(@Param("companyId") String companyId);

    /**
     * 取消动保配(喂)料明细
     * @param zooGroupIdList
     */
    Integer cancelZooAllocDetail(@Param("zooGroupIdList") List<String> zooGroupIdList);
    List<DecrQtyDTO> cancelZooAllocDetailQty(@Param("zooGroupIdList") List<String> zooGroupIdList);
    List<Date> cancelZooAllocDate(@Param("zooGroupIdList") List<String> zooGroupIdList);

    /**
     * 检查库存
     * @param feedQtyList
     * @return
     */
    List<FeedStockDTO> checkFeedStock(@Param("feedQtyList") List<FeedQty> feedQtyList);


    /**
     * 工作日志查询
     * @param dto
     * @return
     */
    Integer queryJobLogListTotal(JobLogInDTO dto);
    List<JobLogVO> queryJobLogList(JobLogInDTO dto);

    /**
     * 动保工作日志查询
     * @param dto
     * @return
     */
    Integer queryZooJobLogListTotal(JobLogInDTO dto);
    List<JobLogVO> queryZooJobLogList(JobLogInDTO dto);
    /**
     * 动保工作日志表头
     * @param dto
     * @return
     */
    List<Map<String,String>> queryZooJobLogTitle(JobLogInDTO dto);


    /**
     * 销售工作日志列表查询
     * @param dto
     * @return
     */
    Integer querySaleJobLogListTotal(JobLogInDTO dto);
    List<Map<String,Object>> querySaleJobLogList(JobLogInDTO dto);


    /**
     * 库存消耗日志
     * @param dto
     * @return
     */
    Integer queryStockJobLogListTotal(JobLogInDTO dto);
    List<Map<String,Object>> queryStockJobLogList(JobLogInDTO dto);



    /**
     * 虾料配料信息查询
     * @param dto
     * @return
     */
    Integer queryShrimpAllocInfoTotal(FeedAllocQueryInDTO dto);
    List<Map<String,Object>> queryShrimpAllocInfo(FeedAllocQueryInDTO dto);

    /**
     * 动保配料信息查询
     * @param dto
     * @return
     */
    Integer queryZooAllocInfoTotal(FeedAllocQueryInDTO dto);
    List<ZooWeighOutDTO> queryZooAllocInfo(FeedAllocQueryInDTO dto);


    /**
     * 完成动保称料全部任务
     * @param dto
     */
    void finishWeighZooTaskAll(FinishWeighZooDTO dto);

    /**
     * 查询动保任务列表
     * @param taskGroupId
     * @return
     */
    List<Map<String,Object>> queryZooTaskList(@Param("taskGroupId") String taskGroupId);

    /**
     * 查询未喂料列表
     * @param companyId
     * @return
     */
    List<Map<String,Object>> queryUnfeedList(@Param("companyId") String companyId);

    /**
     * 查询未喂料详情
     * @param companyId
     * @param allocDate
     * @param serialNo
     * @return
     */
    List<Map<String,Object>> queryUnfeedDetail(@Param("companyId") String companyId,@Param("allocDate") String allocDate,@Param("serialNo")  Integer serialNo);

    /**
     * 查询未喂料任务料量
     * @param companyId
     * @param allocDate
     * @param serialNo
     * @return
     */
    List<DecrQtyDTO> queryUnfeedQty(@Param("companyId") String companyId,@Param("allocDate") String allocDate,@Param("serialNo")  Integer serialNo);

    /**
     * 取消未喂料任务
     * @param companyId
     * @param allocDate
     * @param serialNo
     */
    void cancelUnfeedTask(@Param("companyId") String companyId,@Param("allocDate") String allocDate,@Param("serialNo")  Integer serialNo);

    List<String> queryFeedIds(@Param("detailId") String detailId);

    /**
     * 未喂料提醒通知
     * @param companyId
     * @param allocDate
     * @param serialNo
     * @return
     */
    List<String> queryUnfeededNotice(@Param("companyId") String companyId,@Param("allocDate") Date allocDate,@Param("serialNo") Integer serialNo);

    /**
     * 检查配饲料模板
     * @param params
     * @return
     */
    AllocCheckOutDTO allocCheckTemplate(AllocCheckInDTO params);
}
